import string
import scipy
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import sys
import glob
import cPickle
import skimage
sys.path.append(os.path.abspath("C:\Users\Scherer Lab E\Documents\GitHub\Python_Data_Analysis"))
import common_functions as cf
import pims
import passing_event_functions as pef
import trackpy_helper_functions as tphf
import optical_binding_of_driven_particles as obdp
Load the database
store = pd.HDFStore("K:\Pat's_Projects\ParticleTrajectoryData\passing_event_data_trackpy_refined_extra.h5", mode='r')
keys = store.index['key']
def get_rel_r_theta_particle_in_front_success_pos_or_neg_r(df, frame_window, min_r, sign):
'''Function to retrieve del_r and del_theta from the prespective of the
particle in front in a frame_window around each passing event.'''
df_events = df[(df.last_pass_event == True) & (df.del_theta < 0) & (abs(df.del_r) < min_r)]
if sign == 1:
df_events = df_events[df_events.del_r > 0]
else:
df_events = df_events[df_events.del_r < 0]
if len(df_events)==0:
return list(pd.Series()), list(pd.Series())
all_theta = []
all_r = []
for idx, series in df_events.iterrows():
lower_frame = series.frame - frame_window
upper_frame = series.frame + frame_window
df_plot = df.query('@lower_frame < frame < @upper_frame')
df_plot = df_plot[df_plot['track id'] == series['track id']]
df_plot = df_plot[df_plot.theta_nn_id == series.theta_nn_id]
all_theta.append(df_plot.del_theta)
all_r.append(df_plot.del_r)
return all_theta, all_r
def find_mean_passing_paths_no_kurtosis(theta_pos_neg, r_pos_neg, bin_range=[[-20,20],[-20,20]], num_bins=100):
theta_bins = np.linspace(bin_range[0][0], bin_range[0][1], num_bins+1)
theta_pos = theta_pos_neg[0]
theta_neg = theta_pos_neg[1]
r_pos = r_pos_neg[0]
r_neg = r_pos_neg[1]
mean_above = []
mean_below = []
for num in range(len(theta_bins)-1):
lower_lim = theta_bins[num]
upper_lim = theta_bins[num+1]
test_r_pos = r_pos[(theta_pos > lower_lim) & (theta_pos < upper_lim)]
test_r_pos = test_r_pos[(test_r_pos < bin_range[1][1]) & (test_r_pos > bin_range[1][0])]
test_r_neg = r_neg[(theta_neg > lower_lim) & (theta_neg < upper_lim)]
test_r_neg = test_r_neg[(test_r_neg < bin_range[1][1]) & (test_r_neg > bin_range[1][0])]
mean_above_bin = test_r_pos.mean()
mean_below_bin = test_r_neg.mean()
mean_above.append(mean_above_bin)
mean_below.append(mean_below_bin)
return theta_bins, mean_above, mean_below
'''Exlcude the l=-5 experiments'''
keys = store.index['key']
all_theta_pos = []
all_r_pos = []
all_theta_neg = []
all_r_neg = []
for key in keys[:-5]:
df = store.get(key)
theta, r = get_rel_r_theta_particle_in_front_success_pos_or_neg_r(df, 15, 50, 1)
all_theta_pos += theta
all_r_pos += r
for key in keys[:-5]:
df = store.get(key)
theta, r = get_rel_r_theta_particle_in_front_success_pos_or_neg_r(df, 15, 50, -1)
all_theta_neg += theta
all_r_neg += r
series_all_theta_pos = pd.concat(all_theta_pos)
series_all_r_pos = pd.concat(all_r_pos)
series_all_theta_neg = pd.concat(all_theta_neg)
series_all_r_neg = pd.concat(all_r_neg)
from matplotlib.colors import LogNorm
concat_pos = pd.concat([series_all_r_pos, series_all_theta_pos], axis=1)
concat_pos = concat_pos.query('-20 < del_r < 20')
concat_pos = concat_pos.query('-20 < del_theta < 20')
series_all_theta_pos = concat_pos['del_theta']
series_all_r_pos = concat_pos['del_r']
concat_neg = pd.concat([series_all_r_neg, series_all_theta_neg], axis=1)
concat_neg = concat_neg.query('-20 < del_r < 20')
concat_neg = concat_neg.query('-20 < del_theta < 20')
series_all_theta_neg = concat_neg['del_theta']
series_all_r_neg = concat_neg['del_r']
theta_pos_neg = (series_all_theta_pos, series_all_theta_neg)
r_pos_neg = (series_all_r_pos, series_all_r_neg)
theta, above, below = find_mean_passing_paths_no_kurtosis(theta_pos_neg, r_pos_neg)
plt.plot(theta[:-1], above, 'C3o')
plt.plot(theta[:-1], below, 'C1o')
plt.plot(series_all_theta_pos, series_all_r_pos, '.', ms=1, alpha=0.3)
#plt.plot(series_all_theta_neg, series_all_r_neg, 'C5.', ms=0.5, alpha=0.1)
#plt.hist2d(series_all_theta, series_all_r, bins=50, range=[[-20, 20],[-20, 20]], norm=LogNorm())
plt.xlim(-20, 20)
plt.ylim(-20, 20)
plt.xlabel(r"$\Delta \theta$")
plt.ylabel(r"$\Delta r$")
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_mean_path.pkl", mode='w')
cPickle.dump([above, below, theta, theta_pos_neg, r_pos_neg], f)
f.close()
index = store.index
L_groups_data = []
Ls = [[1,2], [3, 4], [5],[-5]]
for L in Ls:
keys = index[index['L'].isin(L)].key
all_theta_pos = []
all_r_pos = []
all_theta_neg = []
all_r_neg = []
for key in keys:
df = store.get(key)
theta, r = get_rel_r_theta_particle_in_front_success_pos_or_neg_r(df, 15, 50, 1)
all_theta_pos += theta
all_r_pos += r
for key in keys:
df = store.get(key)
theta, r = get_rel_r_theta_particle_in_front_success_pos_or_neg_r(df, 15, 50, -1)
all_theta_neg += theta
all_r_neg += r
series_all_theta_pos = pd.concat(all_theta_pos)
series_all_r_pos = pd.concat(all_r_pos)
series_all_theta_neg = pd.concat(all_theta_neg)
series_all_r_neg = pd.concat(all_r_neg)
concat_pos = pd.concat([series_all_r_pos, series_all_theta_pos], axis=1)
concat_pos = concat_pos.query('-20 < del_r < 20')
concat_pos = concat_pos.query('-20 < del_theta < 20')
series_all_theta_pos = concat_pos['del_theta']
series_all_r_pos = concat_pos['del_r']
concat_neg = pd.concat([series_all_r_neg, series_all_theta_neg], axis=1)
concat_neg = concat_neg.query('-20 < del_r < 20')
concat_neg = concat_neg.query('-20 < del_theta < 20')
series_all_theta_neg = concat_neg['del_theta']
series_all_r_neg = concat_neg['del_r']
theta_pos_neg = (series_all_theta_pos, series_all_theta_neg)
r_pos_neg = (series_all_r_pos, series_all_r_neg)
theta, above, below = find_mean_passing_paths_no_kurtosis(theta_pos_neg, r_pos_neg, num_bins=30)
plt.plot(theta[:-1], above, 'C3o')
plt.plot(theta[:-1], below, 'C1o')
plt.title('Passing Events for L='+str(L)+' with '+str(len(keys))+' experiments')
#plt.plot(series_all_theta, series_all_r)
plt.hist2d(series_all_theta, series_all_r, bins=30, range=[[-20, 20],[-20, 20]], norm=LogNorm())
plt.xlabel(r"$\Delta \theta$")
plt.ylabel(r"$\Delta r$")
plt.show()
L_groups_data.append([above, below, theta, theta_pos_neg, r_pos_neg])
f = open("C:\Users\Scherer Lab E\Box Sync\Passing\Figures and Data\Data\pass_event_mean_path_grouped_Ls.pkl", mode='w')
cPickle.dump(L_groups_data, f)
f.close()